Amazon CloudFrontおよびAWS WAFを用いてエッジサービスの活用方法を学ぼうハンズオンをやってみた
静的コンテンツを CloudFront で配信する学習コンテンツを探していました。AWS Hands-on for Beginners にちょうどよいコースがあったのでやってみました。
AWS Hands-on for Beginners Amazon CloudFrontおよびAWS WAFを用いて エッジサービスの活用方法を学ぼうをやってみます。
上記ハンズオンで以下のことを手を動かしてながら学べます。
- なぜエッジサービスが必要のか?エッジサービスとは何か?を学ぶ
- CloudFront を使ってコンテンツキャッシュを運用する方法を学ぶ
- WAF を使ってアプリケーションレイヤーの攻撃を防御する方法を学ぶ
構築する構成図
画像引用: ハンズオンのアンケート回答後にダウンロードできる資料より
やってみた感想
- 2021年1月に収録されたハンズオン動画のため一部マネージメントコンソールの UI に変更は見られるものの構築する上では支障はありませんでした(2022年5月現在)
- 動的コンテンツ(API Gateway + Lambda)、静的コンテンツ(S3)のコンテンツに応じた CloudFront のキャッシュを有効化、無効化設定を試せる
- CloudFront を設定するだけではなく設定後の確認方法も学べる
- 以下のサービスを体験したい初心者にオススメ
- CloudFront + S3(静的コンテツの配信)
- API Gateway + Lambda (動的コンテンツの生成)
- AWS WAF
- ハンズオンを完走するまでの所要時間は2時間でした
AWS Hands-on for Beginners とは
ハンズオン動画(YouTube)を見ながら実際に手を動かして学ぶ AWS から提供されているコンテンツです。
AWS Hands-on for Beginners シリーズのリンク
対象コース
AWS Hands-on for Beginners Amazon CloudFrontおよびAWS WAFを用いて エッジサービスの活用方法を学ぼうを手を動かしてながらやってみました。CloudFront の UI 変更に伴い戸惑いそうなところと、個人的に面白かった箇所を中心に紹介します。
2021年7,8月のアップデートで CloudFront の UI に大きな変更がありました。ハンズオンをすすめる上では致命的な部分はありませんでした。一部気になったところはキャプチャを載せてあります。ハンズオン動画のお供にしていただければと思います。
コース目次
- 本シリーズの概要や前提の説明とハンズオンで構築する内容の確認
- AWS グローバルインフラストラクチャとエッジサービスについて
- AWSのエッジサービスとContent Delivery Networkについて
- Amazon CloudFrontのハンズオン その1 (静的コンテンツの配信設定)
- Amazon CloudFrontのハンズオン その2 (コンテンツキャッシュの設定)
- Amazon CloudFrontのハンズオン その3 (動的コンテンツの配信設定①)
- Amazon CloudFrontのハンズオン その4 (動的コンテンツの配信設定②)
- AWS WAFの概要と設定項目の確認
- AWS WAFのハンズオン
- 本シリーズのまとめ、リソースの削除
1. 本シリーズの概要や前提の説明とハンズオンで構築する内容の確認
座学パートです。今回構築する構成を把握します。
画像引用: ハンズオンのアンケート回答後にダウンロードできる資料より
2. AWS グローバルインフラストラクチャとエッジサービスについて
座学パートです。CloudFront(CDN)によるエッジサービスの導入効果を学びます。
画像引用: ハンズオンのアンケート回答後にダウンロードできる資料より
画像引用: ハンズオンのアンケート回答後にダウンロードできる資料より
3. AWSのエッジサービスとContent Delivery Networkについて
座学パートです。動的コンテンツ、静的コンテンツとは何を指しているのかを学びます。
画像引用: ハンズオンのアンケート回答後にダウンロードできる資料より
04. Amazon CloudFrontのハンズオン その1 (静的コンテンツの配信設定)
S3 バケットに静的コンテツをアップロードし CloudFront 経由で配信する設定をします。この章ではあえて CloudFront のキャッシュを無効にしてキャッシュされない設定で動作確認をします。
レスポンスヘッダーのx-cache
を確認するとMiss from cloudfront
と表示されています。CloudFront のキャッシュは使われておらず、CloudFront 経由してオリジンの S3 バケットから画像を取得したことがわかります。
x-cache: Miss from cloudfront
ただの設定方法のハンズオンではなく学習コンテンツとして制作されていておもしろいです。
05. Amazon CloudFrontのハンズオン その2 (コンテンツキャッシュの設定)
S3 バケットにアップロードした静的コンテンツは以下の階層です。この章ではstatic
配下のオブジェクト(css, image, js)にはキャッシュを有効化する設定をします。
. ├── index.html └── static ├── css │ └── styles.css ├── image │ └── cloudfront.png └── js └── script.js
static/*
のオブジェクトに対してキャッシュを適用させるビヘイビアを作成します。
static
配下の画像(cloudfront.png
)はHit from cloudfront
と表示されました。今度は CloudFront のキャッシュにヒットしたことが確認できました。
x-cache: Hit from cloudfront
Web ブラウザから API を呼んで翻訳してみた。
キャッシュキーについては以下のリンクも一読するとより理解につながるかと思います。
06. Amazon CloudFrontのハンズオン その3 (動的コンテンツの配信設定①)
日本語の文字列を入力すると英語訳を返す API を API Gateway と Lambda で作成します。
Lambda は以下の設定に変更し問題なく動作しました。
- ランタイム: Python3.9
- アーキテクチャ: arm64
API Gateway はメソッドリクエストに URL クエリ文字列パラメータを設定しました。
07. Amazon CloudFrontのハンズオン その4 (動的コンテンツの配信設定②)
動的コンテンツを提供する API Gateway に対する CloudFront の設定をします。
オリジンリクエストポリシーを作成し、オリジンリクエスト設定でinput_text
のクエリ文字列をホワイトリストに入れます。
API Gateway をオリジンに新規登録し、ビヘイビアを新規作成します。ビヘイビアのパスパターンは API Gateway のステージ名を入力します。前の章でステージ名はapi
と設定しました。
動的コンテンツはキャッシュさせたくないため、キャッシュポリシーの設定は CachingDisabled
を選択します。オリジンリクエストポリシーは新規作成したクエリ文字列input_text
をホワイトリストに入れたポリシーを選択します。
input_text
の文字列を翻訳した API を呼び出した箇所は Miss from cloudfront
と表示されています。キャッシュされていないことを確認できました。
今回の CloudFront の設定でキャッシュはどこで有効化なのかわかりやすい図です。全体の HTML の index.html
はキャッシュ設定が有効ではないデフォルトのビヘイビア(一番最初に作成したビヘイビア)に該当するため図のとおりです。
CloudFront の設定方法はもちろん、CloudFront 設定後の確認方法も学べました。
08. AWS WAFの概要と設定項目の確認
座学パートです。WebACL の説明がわかりやすいのでぜひ動画をご確認ください。
09. AWS WAFのハンズオン
先日、AWS WAF で必要な設定をまとめたブログを書いたので紹介します。ハンズオン終わった後に一読していただくと「うーん、実際に設定するときはいろいろ考えることあるなぁ」という気持ちになれるかと思います。
10. シリーズのまとめ、リソースの削除
作成したリソースのお片付けと、学習したことのまとめです。最後にここから一歩進むための学習コンテンツを紹介があります。
以上でハンズオンは終了です。おおよそ2時間で終わりました。
おわりに
AWS Hands-on for Beginners は以前にもやってみたことがあり、ハンズオンでハマらずに済みサクサク進めることができて好きな学習コンテンツでした。今回も同様にムダな苦労することなく静的・動的コンテンツ配信に CloudFront を設定を学べました。2時間で終わり時間的にも手軽で人様にオススメしやすいです。
本ブログ内でハンズオン資料の画像を引用しておりますが、資料はもっとボリュームあるのでぜひ登録して実際の資料をご確認ください。
以前のやってみた記事
- サーバーレスアーキテクチャで翻訳 Web API を構築するハンズオンをやってみた | DevelopersIO
- AWS SAM を使ってテンプレートからサーバーレスな環境を構築するハンズオンをやってみた | DevelopersIO